package com.example.tian.securityinspection.util.genUtil;

import android.content.Context;
import android.util.Log;

import com.example.tian.securityinspection.gen.FruitDao;
import com.example.tian.securityinspection.model.bean.genBean.Fruit;
import com.example.tian.securityinspection.util.DaoManager;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.List;

/**
 * 测试用数据库的工具类
 * 完成对某一张表的具体操作, ORM 操作的是对象
 */
public class FruitDaoUtil {

    private DaoManager mManager;
    private String TAG = "flag";

    /**
     * 操作Fruit的构建函数
     */
    public FruitDaoUtil(Context context){
        mManager = DaoManager.getInstance();
        mManager.init(context);
    }
    /**
     * 完成对数据库表的插入操作-->并且会检测数据库是否存在,不存在自己创建,
     *
     * @param fruit
     * @return 返回long值 -1为失败
     */
    public boolean insertFruit(Fruit fruit){
        boolean flag ;
        flag = mManager.getSession().getFruitDao().insertOrReplace(fruit) != -1; //不等于-1是true 否则是false
        Log.i(TAG, "-------插入一条的结果为"+flag);
        return flag;
    }

    /**
     * 同时插入多条数据,在子线程中操作
     * @return
     */
    public boolean insertListFruit(final List<Fruit> mList){
        boolean flag = false;
        try {
            mManager.getSession().runInTx(new Runnable() {
                @Override
                public void run() {
                    for (Fruit fruit : mList){
                        mManager.getSession().insertOrReplace(fruit);
                    }
                }
            });
            flag = true;
        } catch (Exception e){
            e.printStackTrace();
        }
        Log.i(TAG, "-------插条的结果为"+flag);
        return flag;
    }

    /**
     * 刷新指定数据
     */
    public void refreshFruit(Fruit fruit){
        mManager.getSession().refresh(fruit) ;
    }

    /**
     * 修改指定数据
     * @return
     */
    public boolean updateFruit(Fruit fruit){
        boolean flag = false;
        try {
            mManager.getSession().update(fruit);
            flag = true;
        }catch (Exception e){
            e.printStackTrace();
        }
        Log.i(TAG, "-------修改指定数据的结果为"+flag);
        return flag;
    }

    /**
     * 删除指定数据
     * @return
     */
    public boolean deleteFruit(Fruit fruit){
        boolean flag = false;
        try {
            mManager.getSession().delete(fruit);
            flag = true;
        }catch (Exception e){
            e.printStackTrace();
        }
        Log.i(TAG, "-------删除指定数据的结果为"+flag);
        return flag;
    }

    /**
     * 删除所有数据
     * @return
     */
    public boolean deleteAll(){
        boolean flag = false;
        try {
            mManager.getSession().deleteAll(Fruit.class);
            flag = true;
        } catch (Exception e){
            e.printStackTrace();
        }
        Log.i(TAG, "-------删除所有数据的结果为"+flag);
        return flag;
    }

    /**
     * 查询所有记录
     * @retrun
     */
    public List<Fruit> queryAllFruit(){
        return mManager.getSession().loadAll(Fruit.class);
    }

    /**
     * 根据主键id查询记录
     * @param key
     * @return
     */
    public Fruit queryFruitById(long key){
        return mManager.getSession().load(Fruit.class, key);
    }

    /**
     * 使用sql语句进行查询操作
     * 参数-sql语句 参数二 查询条件限定
     */
    public List<Fruit> queryFruitBySql(String sql, String[] conditions){
        //List<Fruit> list = mManager.getSession().queryRaw(Fruit.class, "where name like ? and _id<=?", new String[]{"%jo%", "4"});

        return mManager.getSession().queryRaw(Fruit.class, sql, conditions);
    }

    /**
     * 使用查询构建器进行查询
     * @return
     */
    public List<Fruit> queryFruitByQueryBuilder(long id){

        //使用查询构建器
        QueryBuilder<Fruit> queryBuilder = mManager.getSession().queryBuilder(Fruit.class);
        //这些条件是 逻辑与
//        queryBuilder.where(FruitDao.Properties.Name.like("orange"));
//        List<Fruit> list = queryBuilder.where(FruitDao.Properties.Id.le(4)).list();
        return queryBuilder.where(FruitDao.Properties.Id.eq(id)).list();
    }


}
